﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OracleClient;
using System.Data;

namespace DataLayer.DAO
{
    public class AccionDAO
    {

        private Connection.Connection cn;
        private OracleConnection objCn;

        public AccionDAO()
        {
            cn = new Connection.Connection();
            objCn = cn.Conecta();
        }


        public int insertAccion(Accion acnSNC)
        {
            int resultado = 0;

            using (OracleCommand cmd = new OracleCommand("INSERTACCIONSNC", objCn))
            {
                cmd.CommandType = CommandType.StoredProcedure;

                OracleParameter p1 = new OracleParameter("R_DESCRIPCION", OracleType.VarChar, 4000);
                p1.Value = acnSNC.DesAccion;

                OracleParameter p2 = new OracleParameter("R_OBSERVACION", OracleType.VarChar, 4000);
                p2.Value = acnSNC.ObsAccion;

                OracleParameter p3 = new OracleParameter("R_NRO_DOCUMENTO", OracleType.NVarChar, 15);
                p3.Value = acnSNC.NumDocEmpleado;

                OracleParameter p4 = new OracleParameter("R_CODESTADO", OracleType.VarChar, 20);
                p4.Value = acnSNC.CodEstado;

                OracleParameter p5 = new OracleParameter("R_COD_SNC", OracleType.VarChar, 30);
                p5.Value = acnSNC.CodSNC;

                OracleParameter p6 = new OracleParameter("R_Nom_Archivo", OracleType.VarChar, 200);
                p6.Value = acnSNC.NomArchivo;

                OracleParameter p7 = new OracleParameter("R_Ruta_Archivo", OracleType.VarChar, 300);
                p7.Value = acnSNC.RutaArchivo;

                OracleParameter p8 = new OracleParameter("R_USU_NRO_DOCUMENTO", OracleType.VarChar, 20);
                p8.Value = acnSNC.CodUsuario;

                OracleParameter p9 = new OracleParameter("R_Fecha_Registro", OracleType.DateTime);
                p9.Value = acnSNC.FechaRegistro;

                cmd.Parameters.Add(p1);
                cmd.Parameters.Add(p2);
                cmd.Parameters.Add(p3);
                cmd.Parameters.Add(p4);
                cmd.Parameters.Add(p5);
                cmd.Parameters.Add(p6);
                cmd.Parameters.Add(p7);
                cmd.Parameters.Add(p8);
                cmd.Parameters.Add(p9);

                try
                {
                    objCn.Open();

                    resultado = cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    objCn.Dispose();
                }
                finally
                {
                    objCn.Close();
                }
            }
            return resultado;
        }

        public List<Accion> consultarAccion(string codigoSNC)
        {
            List<Accion> list = new List<Accion>();

            using (OracleCommand cmd = new OracleCommand("BUSCARACCION", objCn))
            {
                cmd.CommandType = CommandType.StoredProcedure;

                OracleParameter refParameter = new OracleParameter();
                refParameter.ParameterName = "RECORDSET";
                refParameter.OracleType = OracleType.Cursor;
                refParameter.Direction = ParameterDirection.Output;

                OracleParameter codigoParameter = new OracleParameter();
                codigoParameter.ParameterName = "R_COD_SNC";
                codigoParameter.OracleType = OracleType.VarChar;
                codigoParameter.Size = 30;
                codigoParameter.Direction = ParameterDirection.Input;
                codigoParameter.Value = codigoSNC;

                cmd.Parameters.Add(refParameter);
                cmd.Parameters.Add(codigoParameter);

                try
                {
                    objCn.Open();

                    OracleDataReader dr = cmd.ExecuteReader();

                    while (dr.Read())
                    {
                        Accion acn = new Accion();
                        acn.DesEstado = Convert.ToString(dr[0]);
                        acn.DesAccion = Convert.ToString(dr[1]);
                        acn.NomEmpleado = Convert.ToString(dr[2]);
                        acn.DesArea = Convert.ToString(dr[3]);                        
                        acn.FechaRegistro = Convert.ToDateTime(dr[4]);                       
                        acn.CodAccion = Convert.ToString(dr[5]);
                        acn.ObsAccion = Convert.ToString(dr[6]);
                        acn.NumDocEmpleado = Convert.ToString(dr[7]);
                        acn.CodEstado = Convert.ToString(dr[8]);                       

                        list.Add(acn);
                    }
                }
                catch (Exception ex)
                {
                    objCn.Dispose();
                }
                finally
                {
                    objCn.Close();
                }
            }
            return list;
        }

        public int deleteAccion(Accion acnSNC)
        {
            int resultado = 0;

            using (OracleCommand cmd = new OracleCommand("DELETEACCION", objCn))
            {
                cmd.CommandType = CommandType.StoredProcedure;

                OracleParameter p1 = new OracleParameter("R_CODIGO_ACCION", OracleType.VarChar, 30);
                p1.Value = acnSNC.CodAccion;               

                cmd.Parameters.Add(p1);              

                try
                {
                    objCn.Open();

                    resultado = cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    objCn.Dispose();
                }
                finally
                {
                    objCn.Close();
                }
            }
            return resultado;
        }

        public int updateAccion(Accion acnSNC)
        {
            int resultado = 0;

            using (OracleCommand cmd = new OracleCommand("UPDATEACCION", objCn))
            {
                cmd.CommandType = CommandType.StoredProcedure;

                OracleParameter p1 = new OracleParameter("R_CODIGO_ACCION", OracleType.VarChar, 30);
                p1.Value = acnSNC.CodAccion;

                OracleParameter p2 = new OracleParameter("R_DESCRIPCION", OracleType.VarChar, 4000);
                p2.Value = acnSNC.DesAccion;

                OracleParameter p3 = new OracleParameter("R_OBSERVACION", OracleType.VarChar, 4000);
                p3.Value = acnSNC.ObsAccion;

                OracleParameter p4 = new OracleParameter("R_NRO_DOCUMENTO", OracleType.NVarChar, 15);
                p4.Value = acnSNC.NumDocEmpleado;

                OracleParameter p5 = new OracleParameter("R_CODESTADO", OracleType.VarChar, 20);
                p5.Value = acnSNC.CodEstado;               

                OracleParameter p6 = new OracleParameter("R_USU_NRO_DOCUMENTO", OracleType.VarChar, 20);
                p6.Value = acnSNC.CodUsuario;            

                cmd.Parameters.Add(p1);
                cmd.Parameters.Add(p2);
                cmd.Parameters.Add(p3);
                cmd.Parameters.Add(p4);
                cmd.Parameters.Add(p5);
                cmd.Parameters.Add(p6);               

                try
                {
                    objCn.Open();

                    resultado = cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    objCn.Dispose();
                }
                finally
                {
                    objCn.Close();
                }
            }
            return resultado;
        }

        public int getConteoFinalizado(string codSNC)
        {
            int secuencia = 0;

            using (OracleCommand cmd = new OracleCommand("RECUPERARCANTIDADACCION", objCn))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                OracleParameter refparameter = new OracleParameter();
                refparameter.ParameterName = "RECORDSET";
                refparameter.OracleType = OracleType.Cursor;
                refparameter.Direction = ParameterDirection.Output;

                OracleParameter codigoParameter = new OracleParameter();
                codigoParameter.ParameterName = "R_COD_SNC";
                codigoParameter.OracleType = OracleType.VarChar;
                codigoParameter.Size = 30;
                codigoParameter.Direction = ParameterDirection.Input;
                codigoParameter.Value = codSNC;

                cmd.Parameters.Add(refparameter);
                cmd.Parameters.Add(codigoParameter);
                
                try
                {
                    objCn.Open();

                    OracleDataReader dr = cmd.ExecuteReader();

                    while (dr.Read())
                    {
                        secuencia = Convert.ToInt32(dr[0]);
                    }
                }
                catch (Exception ex)
                {
                    objCn.Dispose();
                }
                finally
                {
                    objCn.Close();
                }
            }
            return secuencia;
        }

        



    }
}
